
#ifndef MKAHYPAR_BITSET_H
#define MKAHYPAR_BITSET_H
#include <cstdint>
#include <cstdio>
//优化超边连接集
namespace mkahypar{

  class Bitset{
  public:
    Bitset():_n(0){

    }
    template<typename T>
    void add(T id){
      _n |= static_cast<uint64_t>(1) << id;
    }

    template<typename T>
    void remove(T id){
      _n ^= static_cast<uint64_t>(1) << id;
    }
    void clear(){
      _n = 0;
    }

    //如果_n 只要一个元素，获取唯一的1的位置
    int getOnlyPos(){
      return  __builtin_ctz(_n);// eg 001 = 0,010 = 1,100 = 2
    }

    int size(){
      return __builtin_popcountll(_n);
    }
    uint64_t _n;
  };

}
#endif //MKAHYPAR_BITSET_H
